/*
 * 18-mar-2007 
 */
package futbol.tacticas.concursantes2007.Chuky.chuky.equipo;

import java.awt.Point;
import java.util.ArrayList;

import futbol.tacticas.concursantes2007.Chuky.chuky.entrenador.*;
import futbol.tacticas.concursantes2007.Chuky.chuky.futbolista.*;

/**
 *
 * @author Joan Crosas
 */
public class CentroCampista06 extends Futbolista {
	private static final int NUMERO = 6;
	private static final int FUERZA = 6;
	private static final Point POSICION_INICIAL = new Point( 140, 30 );
	private static final Point POSICION_ATAQUE = new Point( 15, 40 );
	private static final Point POSICION_DEFENSA = new Point( -25, 20 );
	
	private Accion accion;
	private Point posicionPreferida;

	/**
	 * 
	 * @param numero
	 * @param posicionInicial
	 */
	public CentroCampista06( EntrenadorListener entrenadorListener ) {
		super( NUMERO, FUERZA, POSICION_INICIAL, entrenadorListener );
		posicionPreferida = POSICION_DEFENSA;
	}
	
	/**
	 * 
	 */
	public void prepararAccion( ArrayList<Futbolista> amigos ) {
		accion = null;

		if( isBalonControlado() ) {

			if( isBalonEncima() ) {
				accion = accionPase( amigos );
			}
			if( accion == null ) {
				AnalizadorCamino analizadorCamino = new AnalizadorCamino( getPosicion(), new Point( 120, -80 ), getPosicionEnemigos() );
				Camino caminoLateral = analizadorCamino.analizar();
	
				Point camino[] = caminoLateral.getCamino();
				
				Point irA = getPosicion(); // por si acaso no hubiera ningn camino

				if( camino != null ) {
					int index = 2;
					if( index > camino.length - 1 ) {
						index = camino.length - 1;
					}
					irA = camino[index];
				}

				accion = accionCorrer( irA );
			}

		} else {
			accion = accionCorrer( getPosicionPreferida() );
		}

		// por si las moscas
		if( accion == null ) {
			accion = new AccionCorrer( this, getPosicionPreferida() );
		}
	}

	/**
	 * @param amigos
	 * @return
	 */
	private Accion accionPase( ArrayList<Futbolista> amigos ) {
		AnalizadorPases analizadorPases = new AnalizadorPases( this, amigos );
		analizadorPases.analizar();
		analizadorPases.filtrarPases( true );
		
		Pase pase = null;
		
		// buscamos si alguno de nuestros laterales se encuentra entre los elejidos
		ArrayList<Pase> pases = analizadorPases.getPases();
		Pase paseLateral = null;
		for( int i = 0; i < pases.size(); i++ ) {
			int numero = pases.get( i ).getFutbolista().getNumero();
			if( ( numero == 9 || numero == 10 ) && pases.get( i ).getDistancia() < getDistanciaMaxPase() ) {
				if( paseLateral == null ) {
					paseLateral = pases.get( i );
				} else if( pases.get( i ).getInfo().getMuyMalo() < paseLateral.getInfo().getMuyMalo() ) {
					paseLateral = pases.get( i );
				}
			}
		}
		
		// si el pase es bueno.. ui si el pase es bueno
		if( paseLateral != null ) {
			pase = paseLateral;
		} else {
			pase = analizadorPases.getMejorPase();
		}
		
		// si el futbolista se encuentra en apuros despejamos el baln 
		// lo mandamos a la posicin mas buena y menos mala
		if( pase == null && getInfoPosicion().getMuyMalo() > 0 ) {
			pase = analizadorPases.getPaseMenosMalo();
		}
		

		Accion accionPase = null;
		if( pase != null ) {
			accionPase = new AccionGolpearBalon( this, pase.getAngulo(), 100 );
			if( pase.getAnotacion() != null ) {		
				getEntrenadorListener().startAnotacion();
				getEntrenadorListener().addAnotacion( pase.getAnotacion() );
			}
		}

		return accionPase;

	}

	public Accion getAccion() {
		return accion;
	}

	public Point getPosicionPreferida() {
		if( getAnotacion() != null && getAnotacion().getAccion() == Anotacion.ACCION_CORRER ) {
			posicionPreferida = getAnotacion().getDonde();

		} else if( getTipoJuego() == Entrenador.ATAQUE && getBalon().getPosicionBalon().x > -30 ) {
			posicionPreferida = POSICION_ATAQUE;

		} else {
			posicionPreferida = POSICION_DEFENSA;
			
		}
		return posicionPreferida;
	}

}
